Skip to main content

Global ID Validation

Check an identity outside Nigeria

You have details for a customer — their name, date of birth, address, maybe a national ID number. This endpoint tells you whether those details are real and belong together, by comparing them against government, authoritative and commercial data sources in the customer's country.

POST /api/v1/id-verifications/identity/global/validate

Authenticate with your API key (x-api-key) or a bearer token, as with every other identity endpoint.

How it differs from the Nigerian checks

The Nigerian checks (NIN, vNIN, BVN) are lookups: you send one ID number and get that person's record back.

This endpoint is a comparison. There is no single ID to look up in most countries, so you send everything you know about the person and get back a field-by-field verdict — which details matched, which did not, and how confident the sources are overall.

Three steps to your first call

  1. Find your customer's country in Country coverage and note the fields it requires.
  2. Send those fields, plus countryCode and isSubjectConsent: true. Anything extra you know is welcome — more inputs mean a more meaningful match score.
  3. Read validationDetails in the response to see how each field scored.

Request body

Only countryCode and isSubjectConsent are required on every request. The rest are optional in general — but your customer's country will require some of them.

NameTypeDescription
countryCode*StringISO 3166-1 alpha-2 country code for the validation. Must match the ID issuing country. The table in Country coverage lists every code.
isSubjectConsent*BooleanIndicates the subject has given consent. Must be true.
idStringCandidate's national ID. Required for some countries — see Country coverage.
firstNameStringFirst name to compare against the ID and/or credit file.
lastNameStringLast name to compare against the ID and/or credit file.
fullNameStringFull name to compare against the ID and/or credit file. firstName + lastName are accepted wherever fullName is required.
dateOfBirthStringDate of birth, YYYY-MM-DD.
mobileStringPhone number to compare against the ID and/or credit file.
emailStringEmail address.
advancedBooleanSearch multiple data sources simultaneously for wider coverage. Not offered in every country — see Advanced search.
addressDetailsObjectAddress object.

addressDetails

NameTypeDescription
addressLine1StringAddress line to compare against the ID and/or credit file. Assembled from houseNumber + street when omitted.
addressLine2StringSecond address line.
houseNumberStringHouse or street number.
streetStringStreet or thoroughfare name.
cityStringCity or locality.
postalCodeStringPostal or ZIP code.
stateStringState or province.
countryCodeStringISO 3166-1 alpha-2 code of the address. Defaults to the top-level countryCode.

Country coverage

Every country asks for a different set of details. Find your customer's country below and send the fields listed for it — that is the minimum for the check to run.

FraudSpect validates these before calling the provider, so a request missing a required field fails instantly with 400 and costs you no credit.

Send more than the minimum

The required fields are the floor, not the target. Every extra detail you send is another field scored in validationDetails, which makes the result far more useful.

What each country requires

CountryCodeIdentity fieldsAddress fields (in addressDetails)Advanced search
ArgentinaARid, firstName, lastNameYes
AustraliaAUfirstName, lastNamehouseNumber, street, postalCode, stateYes
AustriaATfirstName, lastNamehouseNumber, street, city, postalCode, stateYes
BelgiumBEfirstName, lastName, dateOfBirthYes
BrazilBRid, fullNameYes
CanadaCAfirstName, lastNamehouseNumber, street, postalCode, stateYes
ChileCLid, fullName, dateOfBirthYes
ChinaCNid, fullNameYes
ColombiaCOid, fullNameYes
Czech RepublicCZfirstName, lastNamecityNo
DenmarkDKidYes
FinlandFIid, firstName, lastNameYes
FranceFRfirstName, lastNameaddressLine1, houseNumber, city, postalCodeYes
GermanyDEfirstName, lastNamehouseNumber, street, city, postalCodeYes
GhanaGHNo
GibraltarGIfirstName, lastNameNo
GreeceGRNo
Hong KongHKfirstName, lastName, dateOfBirthNo
IndiaINidYes
IrelandIEfirstName, lastName, dateOfBirthhouseNumber, street, city, postalCode, stateNo
ItalyITfirstName, lastNamehouseNumber, street, city, postalCode, stateYes
JapanJPfirstName, lastNameNo
KenyaKENo
LuxembourgLUfirstName, lastNameNo
MalaysiaMYid, firstName, lastName, dateOfBirthcity, postalCode, stateNo
MexicoMXidYes
NetherlandsNLfirstName, lastName, dateOfBirthhouseNumber, postalCodeYes
New ZealandNZfirstName, lastNamehouseNumber, street, city, postalCodeYes
NigeriaNGNo
NorwayNOid, firstName, lastName, mobilehouseNumber, city, postalCodeYes
PhilippinesPHfirstName, lastName, dateOfBirth, mobileYes
PolandPLfirstName, lastNamehouseNumber, street, city, postalCodeYes
PortugalPTfirstName, lastNamehouseNumber, street, city, postalCodeYes
SingaporeSGid, fullName, dateOfBirthNo
SlovakiaSKfirstName, lastNamecityNo
South AfricaZAidYes
SpainESfirstName, lastNamestreet, postalCodeNo
SwedenSEidYes
SwitzerlandCHfirstName, lastNamepostalCodeNo
ThailandTHNo
TurkeyTRid, firstName, lastName, dateOfBirthNo
United KingdomGBfirstName, lastNameaddressLine1, city, postalCodeNo
United StatesUSid, firstName, lastNameaddressLine1, city, postalCodeYes

Reading this table

  • Identity fields go at the root of the request body. Address fields go inside addressDetails.
  • means nothing is required beyond countryCode and isSubjectConsent.
  • Wherever fullName is listed, firstName + lastName work just as well — we join them for you.
  • Wherever addressLine1 is listed, houseNumber + street work just as well.
  • Your country is not listed? It is still supported. It simply has no mandatory field beyond countryCode and isSubjectConsent.
  • An empty string counts as not sending the field at all. "state": "" will not satisfy a country that requires state — send a real value or expect a 400.
Two country quirks

Malaysia wants only the last 4 digits of the national ID, not the whole number. Spain coverage includes the Canary Islands, Ceuta and Melilla.

Setting advanced: true widens the search across several data sources at once, for better coverage and accuracy. Not every country offers it — check the Advanced search column above.

If you set it for a country marked No, the request returns 400. We would rather tell you than quietly run a narrower search than the one you asked for.


Sample request

{
"countryCode": "AU",
"isSubjectConsent": true,
"firstName": "TOM",
"lastName": "CLARKE",
"dateOfBirth": "1990-01-01",
"advanced": true,
"addressDetails": {
"houseNumber": "19",
"street": "CASUARINA",
"city": "KILMORE",
"postalCode": "3764",
"state": "VIC"
}
}

Response — Successful

{
"message": "Successfull!",
"status": 200,
"code": "info",
"data": {
"id": "9f1c2b7e-4c31-4d0f-9d2a-6b1f0c8e5a11",
"documentType": "GLOBAL_EIDV",
"documentCountry": "AU",
"documentId": "12345678",
"fullName": "TOM CLARKE",
"requestAt": "2026-08-10T09:00:00.000Z",
"requestUpdatedAt": "2026-08-10T09:00:00.000Z",
"requestedBy": {
"id": "7c2e1a44-0f3b-4a8d-91c6-2d4e5f6a7b88",
"firstName": "API",
"lastName": "User"
},
"firstName": "TOM",
"lastName": "CLARKE",
"dateOfBirth": "1990-01-01",
"mobile": "",
"email": "",
"addressDetails": {
"addressLine1": "19 CASUARINA",
"houseNumber": "19",
"street": "CASUARINA",
"city": "KILMORE",
"postalCode": "3764",
"state": "VIC",
"countryCode": "AU"
},
"validationDetails": {
"fullName": {
"status": "partial_matched",
"value": "TOM CLARKE",
"validationMessage": "Partial match made on Complete Name"
},
"lastName": {
"status": "full_matched",
"value": "CLARKE",
"validationMessage": "Full match made on Last Name/Surname"
},
"city": {
"status": "full_matched",
"value": "KILMORE",
"validationMessage": "Full match made on City/Locality"
},
"postalCode": {
"status": "full_matched",
"value": "3764",
"validationMessage": "Full match made on Postal Code/Zip Code"
},
"dateOfBirth": {
"status": "not_matched",
"value": "1990-01-01",
"validationMessage": "No match made on Date of Birth"
},
"percentage": {
"percentageFullyMatched": 36,
"percentageNotMatched": 40,
"percentagePartialMatched": 24
}
},
"addressReliability": { "reliability": "10", "adaptation": "30" },
"identityReliability": { "reliability": "30", "adaptation": "0" },
"overallReliability": { "reliability": "30", "adaptation": "30" },
"dataValidation": true,
"isConsent": true,
"status": "found",
"reason": null,
"identityNumber": "12345678",
"country": "AU",
"advanced": true
}
}

Reading the result

FieldWhat it tells you
statusfound when the subject was located in a data source, not_found otherwise.
validationDetailsPer-field outcome — full_matched, partial_matched or not_matched — with a human-readable message. Which keys appear depends on the country and on what you submitted.
percentageShare of the submitted fields that fully, partially and did not match.
identityReliabilityConfidence in the identity match.
addressReliabilityConfidence in the address match.
overallReliabilityCombined confidence across identity and address.
Repeat checks

Results are stored against documentId + country. Re-running a check for the same person in the same country updates the existing record rather than creating a duplicate, so the record id stays stable across retries.


Error Responses

HTTP/1.1 400 Bad Request — missing country-required field

Raised before the provider is called, so no credit is charged. See Country coverage for what each country requires.

{
"message": "US global identity validation requires: id, addressDetails.addressLine1 (or addressDetails.houseNumber and addressDetails.street), addressDetails.city, addressDetails.postalCode.",
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 400 Bad Request — advanced search unavailable

Also raised before the provider is called. No credit is charged. See Advanced search.

{
"message": "Advanced search is not available for GB. Retry without \"advanced\".",
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 400 Bad Request — invalid payload

Body validation failures return every problem at once, as an array.

{
"message": [
"isSubjectConsent must be true to run a global identity validation",
"countryCode must be an ISO 3166-1 alpha-2 code",
"dateOfBirth must be in the format YYYY-MM-DD"
],
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 400 Bad Request — insufficient credit

{
"message": "Insufficient credit",
"error": "Bad Request",
"statusCode": 400
}

HTTP/1.1 403 Forbidden

Returned when your API key or user lacks the KYC verification permissions.

{
"message": "You cannot run this KYC verification check",
"error": "Forbidden",
"statusCode": 403
}

HTTP/1.1 400 Bad Request — service disabled

The Identity Verification module is not enabled for your organisation. Contact support.

{
"message": "Id verification service is disabled for organization",
"error": "Bad Request",
"statusCode": 400
}